package org.TCC_NOVO.client.visual;

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Function;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import java.util.ArrayList;
import org.TCC_NOVO.client.modelo.Atividade_Roteiro;
import org.TCC_NOVO.client.GWTServiceAsync;

public class DisponibilizarMaterialPanel extends Panel{
    private final GWTServiceAsync controller;
    String IDF_Usuario;

    DisponibilizarMaterialPanel self;
    Store store;
    GridPanel grid;
    RecordDef recordDef;
    Toolbar toolbar;
    ArrayList<Atividade_Roteiro> ArrayTarefas = new ArrayList();

    public DisponibilizarMaterialPanel(GWTServiceAsync controller, String IDF_Usua) {
        this.controller = controller;
        this.IDF_Usuario = IDF_Usua;
        this.self = this;
        this.init();
    }

    private void init(){
        this.setBorder(true);
        this.setPaddings(2);

        recordDef = new RecordDef(new FieldDef[]{
            new IntegerFieldDef("ID"),
            new StringFieldDef("projeto"),
            new StringFieldDef("unidade"),
            new StringFieldDef("titulo"),
            new StringFieldDef("descricao"),
            new StringFieldDef("data_Entrega"),
            new StringFieldDef("responsavel"),
            new StringFieldDef("status"),
            new StringFieldDef("IDF_Resp"),
            new StringFieldDef("data_Entrega_Form"),
        });

        store = new Store(recordDef);
        grid = new GridPanel();
        grid.setStore(store);

        ColumnConfig[] columns = new ColumnConfig[]{
            new ColumnConfig("Nome Projeto", "projeto", 120, true),
            new ColumnConfig("Nome Unidade", "unidade", 190, true),
            new ColumnConfig("Título", "titulo", 150, true),
            new ColumnConfig("Descrição", "descricao", 270, true),
            new ColumnConfig("Status", "status", 120, true),
            new ColumnConfig("Data Entrega", "data_Entrega", 90, true),
            new ColumnConfig("Responsável", "responsavel", 90, true),
        };

        ColumnModel columnModel = new ColumnModel(columns);
        grid.setColumnModel(columnModel);
        grid.setFrame(true);
        grid.setStripeRows(true);
        grid.setSize(1020, 565);
        grid.setAutoScroll(true);
        grid.setTitle("Tarefas");
        grid.addTool(new Tool(Tool.REFRESH, new Function() {
            @Override
            public void execute() {
                grid.getEl().mask("Carregando", "x-mask-loading");
                CarrgarGrid();
                Timer timer = new Timer() {
                    @Override
                    public void run() {
                        grid.getEl().unmask();
                    }
                };
                timer.schedule(1000);
            }
        }, "Atualizar"));

        toolbar = getToolbar();
        toolbar.setSize(grid.getWidth(), 30);

        this.add(toolbar);
        this.add(grid);

        //carrega as informações para o grid...
        CarrgarGrid();
    }

    private class CallBackRetTarefas implements AsyncCallback<ArrayList<Atividade_Roteiro>> {
	public void onFailure(Throwable e) {
		MessageBox.alert("Erro ao carregar dados... ", e.getMessage());
	}
	public void onSuccess(ArrayList<Atividade_Roteiro> result) {
                CarregarDados(result);
        }
    }

    private void CarregarDados(ArrayList<Atividade_Roteiro> result){
        ArrayTarefas = result;
        for (int i = 0; i < result.size(); ++i) {
            addRecord(result.get(i));
        }
    }

    public void CarrgarGrid(){
        store.removeAll();
        String sSQL = "select A.ID, A.Titulo, A.Descricao, B.Nick, "+
                      "A.IDF_Resp, A.Status, A.Data_entrega, D.Nome NmUnidade, E.Nome NmProjeto, D.ID IDF_Unidade "+
                      "from ATIVIDADE_ROTEIRO A "+
                      "inner join USUARIO B on B.ID = A.IDF_Resp "+
                      "inner join UNIDADE D on D.ID = A.IDF_Unidade "+
                      "inner join PROJETO E on E.ID = D.IDF_Projeto "+
                      "where (A.IDF_Resp = "+IDF_Usuario+") and (A.Status = 'Em Andamento')";
        controller.RetornarDadosTarefa(sSQL, new CallBackRetTarefas());
    }

    public void addRecord(Atividade_Roteiro Tarefa){
        Object[] rowData = new Object[]{
          Tarefa.getId(),
          Tarefa.getNm_projeto(),
          Tarefa.getNm_unidade(),
          Tarefa.getTitulo(),
          Tarefa.getDescricao(),
          Tarefa.getData_entrega(),
          Tarefa.getResponsavel(),
          Tarefa.getStatus(),
          Tarefa.getIdf_responsavel(),
          Tarefa.getData_entrega_formatada(),
        };
        Record record = recordDef.createRecord(rowData[0].toString(), rowData);
        store.add(record);
    }

    public Toolbar getToolbar(){
        ToolbarButton btnEnviarArq = new ToolbarButton();
        btnEnviarArq.setText(" Disponibilizar Material");
        btnEnviarArq.setIcon("Images/upload.png");
        btnEnviarArq.setTooltip("Permite disponibilizar o material");
        btnEnviarArq.addListener(new ButtonListenerAdapter(){
            @Override
            public void onClick(Button button, EventObject e){
                if (grid.getSelectionModel().getSelected() == null){
                    MessageBox.alert("Necessário Selecionar Algum Registro! ");
                }else{
                    DisponibilizarMaterialForm DispMatForm = new DisponibilizarMaterialForm(controller, 
                                                                                            grid.getSelectionModel().getSelected().getAsString("ID"),
                                                                                            IDF_Usuario,
                                                                                            grid.getSelectionModel().getSelected().getAsString("projeto").trim(),
                                                                                            grid.getSelectionModel().getSelected().getAsString("unidade").trim(),
                                                                                            self);
                    //DispMatForm.IDForm = grid.getSelectionModel().getSelected().getAsString("ID");
                    DispMatForm.show();
                }
            }
        });

        Toolbar toobar = new Toolbar();
        toobar.addButton(btnEnviarArq);

        return toobar;
    }

}
